#ifndef ____SSBASEL__SSBASE__BASE__H__
#define ____SSBASEL__SSBASE__BASE__H__

/*!
* \file base.h
* \brief base header
* 
*
* 
* \author patdz@qq.com
* \version 1.0
* \date 2014/05/26
*/

#include "base_cfg.h"

#include <stdio.h>
#include <stdlib.h>

#ifdef _DEBUG
#include <vld.h> // memory leak checker : http://vld.codeplex.com/
#endif

#if defined(__cplusplus)
#define _SSL_BEGIN			namespace ssl {
#define _SSL_END			}
#define _SSL				ssl::
#define _SSL_USE_NP			using namespace ssl;
#define _SSBASEL_BEGIN		namespace ssbasel {
#define _SSBASEL_END		}
#define _SSBASEL			ssl::ssbasel::
#define _SSBASEL_USE_NP		using namespace ssl::ssbasel;
#else
#define _SSL_BEGIN
#define _SSL_END
#define _SSL
#define _SSL_USE_NP
#define _SSBASEL_BEGIN
#define _SSBASEL_END
#define _SSBASEL
#define _SSBASEL_USE_NP
#endif

#ifdef FORCE_LIB
#define SSBASE_API
#define SSBASE_CLASS
#else
#ifdef SSBASE_EXPORTS
#define SSBASE_API _declspec(dllexport)
#define SSBASE_CLASS _declspec(dllexport)
#else
#define SSBASE_API _declspec(dllimport)
#define SSBASE_CLASS _declspec(dllimport)
#endif
#endif


_SSL_BEGIN
_SSBASEL_BEGIN

#define ss_in_
#define ss_out_
#define ss_inout_
#define ss_optional_

#ifdef UNICODE
	typedef wchar_t tchar;
#else
	typedef char tchar;
#endif

#define DISALLOW_CLASS_COPY_AND_ASSIGN(cls_name) \
	cls_name(const cls_name&); \
	void operator=(const cls_name&)

#define DISALLOW_CLASS_IMPLICIT_CONSTRUCTORS(cls_name) \
	cls_name(); \
	DISALLOW_CLASS_COPY_AND_ASSIGN(cls_name)

_SSBASEL_END
_SSL_END

#endif
